package com.crm.dao.mapper.customMapper.index;


import com.crm.model.vo.index.PerformanceStatisticsVO;
import com.crm.model.vo.index.ProductVO;
import com.crm.model.vo.index.RankingVO;
import com.crm.model.vo.opportunityManager.PerformanceRankingVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 首页信息
 */
public interface FirstPageCustomMapper {

    /**
     * 查询用户下的客户会员数量
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    Integer selectCustomerMembershipNumber(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 查询用户下的联系人数
     * @param accountId 联系人id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    Integer selectContactNumber(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit,@Param("companyId")String companyId);

    /**
     * 查询用户下的商机数
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    Integer selectOpportunityNumber(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 查询用户的电话总时长
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    Integer selectTotalTelehoneHours(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 查询用户的提成总金额
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    BigDecimal selectRoyaltyMoneyTotal(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 查询7天未联系的客户数量
     * @param accountId 用户id
     * @param pastDate 7天前的日期
     * @return
     */
    Integer selectBeOverdueCustomerNumber(@Param("accountId") String accountId,@Param("pastDate") String pastDate);

    /**
     * 查询用户7天内新增跟进
     * @param accountId 用户id
     * @param pastDate 7天前的日期
     * @return
     */
    Integer selectAddFollowNumber(@Param("accountId") String accountId,@Param("pastDate") String pastDate);

    /**
     * 查询用户7天内新增订单
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    Integer selectAddOrderNumber(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 查询用户7天内新增拜访
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    Integer selectAddFollowVisitNumber(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 首页统计个人业绩排行榜
     * @param dateUnit 本月 1 上月
     * @param accountId 用户id
     * @param combination dateType 1 2021  2 202101
     * @return
     */
    List<PerformanceRankingVO> personalPerformanceRanking(@Param("dateUnit") Integer dateUnit,@Param("accountId") String accountId,@Param("combination") String combination);

    /**
     * 查询用户7天内新增业绩
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    BigDecimal selectAddAchievement(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 统计个人业绩 按照月份
     * @param accountId 用户id
     * @param startMonth 开始月份
     * @return endMonth 结束月份
     * @return
     */
    List<PerformanceStatisticsVO> performanceTrend(@Param("accountId")String accountId, @Param("startMonth")String startMonth, @Param("endMonth")String endMonth);

    /**
     * 产品成交排行榜
     * @param dateUnit 1年 2年月
     * @param combination dateType 1 2021  2 202101
     * @return
     */
    List<ProductVO> productTurnoverList(@Param("dateUnit") Integer dateUnit,@Param("combination") String combination);

    /**
     * 根据用户id查询业绩排名
     * @param accountId 用户id
     * @param dateUnit 1本月 2上个月 3本年
     * @return
     */
    RankingVO selectRanking(@Param("accountId") String accountId,@Param("dateUnit") Integer dateUnit);

    /**
     * 二级管理业绩排名
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    RankingVO adminSelectRanking(@Param("companyId") String companyId,@Param("dateUnit")  Integer dateUnit);

    /**
     * 二级管理会员数量
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    Integer adminSelectCustomerMembershipNumber(@Param("companyId") String companyId,@Param("dateUnit")  Integer dateUnit);

    /**
     * 二级管理业绩金额
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    BigDecimal adminSelectperformanceAmount(@Param("companyId") String companyId,@Param("dateUnit")  Integer dateUnit);

    /**
     * 统计二级管理个人业绩
     * @param companyId 公司id
     * @param startMonth 开始月份
     * @return endMonth 结束月份
     */
    List<PerformanceStatisticsVO> adminPerformanceTrend(@Param("companyId") String companyId, @Param("startMonth") String startMonth, @Param("endMonth") String endMonth);

    /**
     * 首页统计二级管理业绩排行榜
     * @param dateUnit  本月 1 上月 2 本周 3 上周 4 今年 5 去年 6
     * @return
     */
    List<PerformanceRankingVO> adminCompanyPerformanceRanking(@Param("dateUnit") Integer dateUnit);

    /**
     * 首页统计二级管理分公司下的业绩排行榜
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4 今年 5 去年 6
     * @param companyId 公司id
     * @param accountId 超级管理员id
     * @return
     */
    List<PerformanceRankingVO> adminCompanyPersonalPerformanceRanking(@Param("dateUnit") Integer dateUnit,@Param("companyId") String companyId,@Param("accountId") String accountId);

    /**
     * 首页统计二级管理分公司下的业绩排行榜
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4 今年 5 去年 6
     * @param companyId 公司id
     * @param accountIds 员工ids
     * @return
     */
    List<PerformanceRankingVO> adminCompanyPersonalPerformanceRank(@Param("dateUnit") Integer dateUnit,@Param("companyId") String companyId,@Param("accountIds") List<String> accountIds);

    /**
     * 二级管理会员增长率
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    BigDecimal selectMembershipGrowthRate(@Param("companyId") String companyId,@Param("dateUnit") Integer dateUnit);

    /**
     * 二级管理会员续费率
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    BigDecimal selectMembershipRenewalRate(String companyId, Integer dateUnit);

    /**
     * 二级管理会员流失率
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    BigDecimal selectMemberTurnoverRate(String companyId, Integer dateUnit);
    /**
     * 二级管理会员流失率
     * @param companyId 公司id
     * @param dateUnit 本月 1 上月 2 本周 3 上周 4
     * @return
     */
    Integer selectMemberTurnoverCount(String companyId, Integer dateUnit);

    /**
     * 首页统计二级管理业绩排行榜
     * @param dateUnit  本月 1 上月 2 本周 3 上周 4 今年 5 去年 6
     * @return
     */
    List<PerformanceRankingVO> adminCompanyPerformanceRank(@Param("startDate") String  startDate,@Param("endDate") String  endDate);

    /**
     * 首页统计按年个人业绩
     */
    List<PerformanceRankingVO> firstPageSalesmanByYear();

    /**
     * 首页统计按年月个人业绩
     */
    List<PerformanceRankingVO> firstPageSalesmanByMonth();
}
